﻿using System.Linq;
using System.Collections.Generic;

namespace Watson.Msrc
{
    internal static class CVE_2019_1253
    {
        private const string name = "CVE-2019-1253";

        public static void Check(VulnerabilityCollection vulnerabilities, int buildNumber, List<int> installedKBs)
        {
            var supersedence = new List<int>();

            switch (buildNumber)
            {
                case 15063:

                    supersedence.AddRange(new int[] {
                        4516068, 4516059, 4522011, 4520010, 4524151,
                        4525245, 4530711, 4534296, 4537765, 4540705,
                        4550939, 4556804, 4561605, 4567516, 4565499,
                        4571689, 4577021
                    });

                    break;

                case 16299:

                    supersedence.AddRange(new int[] {
                        4516066, 4522012, 4520004, 4520006, 4524150,
                        4525241, 4530714, 4534276, 4534318, 4537789,
                        4537816, 4540681, 4541330, 4554342, 4550927,
                        4556812, 4561602, 4567515, 4565508, 4571741,
                        4577041
                    });

                    break;

                case 17134:

                    supersedence.AddRange(new int[] {
                        4516058, 4516045, 4522014, 4519978, 4520008,
                        4524149, 4525237, 4530717, 4534293, 4534308,
                        4537762, 4537795, 4540689, 4541333, 4554349,
                        4550922, 4550944, 4556807, 4561621, 4567514,
                        4565489, 4571709, 4577032
                    });

                    break;

                case 17763:

                    supersedence.AddRange(new int[] {
                        4512578, 4522015, 4519338, 4520062, 4524148,
                        4523205, 4530715, 4534273, 4534321, 4532691,
                        4537818, 4538461, 4541331, 4554354, 4549949,
                        4550969, 4551853, 4561608, 4567513, 4558998,
                        4559003, 4565349, 4571748, 4570333, 4577069
                    });

                    break;

                case 18362:

                    supersedence.AddRange(new int[] {
                        4515384, 4517211, 4522016, 4517389, 4522355,
                        4524147, 4524570, 4530684, 4528760, 4532695,
                        4532693, 4535996, 4540673, 4541335, 4551762,
                        4554364, 4549951, 4550945, 4556799, 4560960,
                        4567512, 4565483, 4559004, 4565351, 4566116,
                        4574727, 4577062
                    });

                    break;

                default:
                    return;
            }

            if (supersedence.Intersect(installedKBs).Any())
            {
                vulnerabilities.SetAsVulnerable(name);
            }
        }
    }
}